package com.hspedu.collections;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;

/**
 * @author LiuJinTao
 * @className Collections_
 * @date 2024/06/13 22:56
 * @description TODO
 */
@SuppressWarnings({"all"})
public class Collections_ {
    public static void main(String[] args) {
        // 创建一个 ArrayList 集合，用于测试
        ArrayList list = new ArrayList();
        list.add("tom");
        list.add("smith");
        list.add("king");
        list.add("milan");

        // reverse(List): 反转 List 中元素的顺序
        Collections.reverse(list);
        System.out.println("反转" + list);

        // shuffle(List): 对 List 集合元素进行随机排序(打乱)
        Collections.shuffle(list);
        System.out.println("打乱" + list);

        // sort(List): 根据元素的自然排序对指定 List 集合元素按升序排序
        Collections.sort(list);
        System.out.println("自然排序" + list);

        // sort(List, Comparator): 根据指定的 Comparator 产生的顺序对 List 集合元素进行排序
        Collections.sort(list, new Comparator() {// 按照长度从小到大排序
            @Override
            public int compare(Object o1, Object o2) {
                return ((String)o1).length() - ((String)o2).length();
            }
        });
        System.out.println("自定义排序" + list);

        // swap(List, int, int): 将指定 List 集合中的 i 处元素和 j 处元素进行交换
        Collections.swap(list, 0, 1);
        System.out.println("交换后" + list);

        // max(Collection): 根据元素的自然排序，返回给定集合中的最大元素
        System.out.println("自然顺序的最大元素=" + Collections.max(list));

        // max(Collection, Comparator): 根据 Comparator 指定的顺序，返回给定集合中的最大元素
        System.out.println("长度最大的元素=" + Collections.max(list, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                return ((String)o1).length() - ((String)o2).length();// 返回长度最大的
            }
        }));

        // min(Collection): 根据元素的自然排序，返回给定集合中的最小元素


        // min(Collection, Comparator): 根据 Comparator 指定的顺序，返回给定集合中的最小元素


        // frequency(Collection, Object): 返回指定集合中指定元素的出现次数
        System.out.println("tom出现的次数=" + Collections.frequency(list, "tom"));

        // copy(List dest, list src): 将 src 中的内容复制到 dest 中
        ArrayList dest = new ArrayList();
        // 为了完成一个完整的拷贝，需要先给 dest 赋值，大小和 src.size() 一样
        for (int i = 0; i < list.size(); i++) {
            dest.add(i);
        }
        Collections.copy(dest, list);
        System.out.println("dest=" + dest);

        // replaceAll(List, Object oldVal, object newVal): 使用新值替换 List 对象的所有旧值
        Collections.replaceAll(list, "tom", "汤姆");
        System.out.println("替换后list=" + list);
    }
}
